package com.baor.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;


/**
 * 文件上传工具类
 */
@Component
public class   UploadUtil {

    /**
     * 从配置文件中文件存储根路径
     */

    @Value("${file.path}")
    private String path;
    //icon  //real

    /**
     * 文件上传工具方法
     * @param path 子路径（例如："icon" 或 "real"）
     * @param files 要上传的文件数组
     * @return 上传后的文件路径列表（以逗号分隔的字符串）
     */

    public String uploadUtil(String path, MultipartFile[] files){
        // 存储上传后的文件路径
        List<String> paths = new ArrayList<String>();
        // 获取配置的根路径  文件里的映射路径
        String rootPath = this.path;
        // 构建完整的文件存储目录路径
        String filePath = rootPath + path + "/";
        // 创建目录对象
        File file = new File(filePath);
        // 如果目录不存在则创建
        if(!file.exists()) {
            file.mkdirs();
        }
        // 遍历所有上传的文件
        Arrays.stream(files).forEach(multipartFile -> {
            // 获取原始文件名
            String fileName = multipartFile.getOriginalFilename();
            // 获取文件后缀（例如：.jpg）
            String fileType = fileName.trim().substring(fileName.lastIndexOf("."));
            // 生成新的文件名：随机数-当前时间戳.后缀
            fileName = (int)(Math.random() * 899999 + 100000) + "-" + System.currentTimeMillis() + fileType;
            try {
                // 将文件保存到指定路径
                multipartFile.transferTo(new File(filePath + fileName));
                // 记录相对路径
                paths.add(path + "/" + fileName);
            } catch (IOException e) {
                // 上传失败时抛出运行时异常
                throw new RuntimeException(e);
            }
        });
        // 将所有文件路径用逗号拼接成字符串返回
        return paths.stream().collect(Collectors.joining(","));
    }
}
